package com.xuef.service.impl;

import com.xuef.service.ILikeService;
import com.xuef.util.JedisAdapter;
import com.xuef.util.RedisKeyGenerateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Set;

/**
 * Created by moveb on 2018/5/21.
 */
@Service
public class LikeServiceImpl implements ILikeService {
    @Autowired
    private JedisAdapter jedisAdapter;

    @Override
    public int getLikeStatus(int userId, int entityType, int entityId) {
        /**
         * 维护一个对某资源的喜欢列表和不喜欢列表，内中保存的是userId
         */
        String likeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizLike(),
                entityType, entityId);
        String dislikeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizDislike(),
                entityType, entityId);
        if(jedisAdapter.sismember(likeKey, String.valueOf(userId))){
            return 1;
        }
        if(jedisAdapter.sismember(dislikeKey, String.valueOf(userId))){
            return -1;
        }
        return 0;
    }

    @Override
    public int like(int userId, int entityType, int entityId) {
        String likeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizLike(),
                entityType, entityId);
        // 保存用户喜欢文章集合 的 key
        String observeBlogsKey = RedisKeyGenerateUtil.getObserveBlogsKey(userId);
        // 加入用户喜欢文章集合
        jedisAdapter.sadd(observeBlogsKey, String.valueOf(entityId));

        String dislikeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizDislike(),
                entityType, entityId);
        // 加入喜欢列表
        jedisAdapter.sadd(likeKey, String.valueOf(userId));

        // 将用户从不喜欢列表删除，如果有的话
        jedisAdapter.srem(dislikeKey, String.valueOf(userId));
        // 返回对该资源的喜欢数量
        return (int)jedisAdapter.scard(likeKey);
    }

    @Override
    public int dislike(int userId, int entityType, int entityId) {
        // 保存用户喜欢文章集合 的 key
        String observeBlogsKey = RedisKeyGenerateUtil.getObserveBlogsKey(userId);
        // 从用户喜欢文章集合 移除
        jedisAdapter.srem(observeBlogsKey, String.valueOf(entityId));

        // 加入不喜欢列表
        String dislikeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizDislike(),
                entityType, entityId);
        jedisAdapter.sadd(dislikeKey, String.valueOf(userId));
        String likeKey = RedisKeyGenerateUtil.getKey(RedisKeyGenerateUtil.getBizLike(),
                entityType, entityId);
        // 将用户从喜欢列表删除，如果有的话
        jedisAdapter.srem(likeKey, String.valueOf(userId));
        // 返回对该资源的喜欢数量
        return (int) jedisAdapter.scard(likeKey);
    }

    /**
     * 获取喜欢的文章列表
     * @param userId
     */
    public Set<String> getLikedBlogs(int userId){
        // 保存用户喜欢文章集合 的 key
        String observeBlogsKey = RedisKeyGenerateUtil.getObserveBlogsKey(userId);
        return jedisAdapter.smembers(observeBlogsKey);
    }
}
